Microcontrollers have become very complex devices with many different types of on-chip peripherals. Currently, the user of these microcontrollers is required to learn the intricacies of each peripheral as well as the interactions between multiple peripherals before they may use their microcontroller to its best advantage. Some microcontroller initialization processes may require the user to set five hundred or more registers in the microcontroller before the microcontroller may be used. Additionally, the user may have to use five or ten different programming manuals to determine a value to be stored in each of these registers. After determining what values should be stored in all the registers, the registers must be programmed correctly or the microcontroller will not function as expected. Finding errors in the initialization process is often very difficult because the user must refer to the same number of manuals that they initially used to set the values to determine the programming error. In some cases, initialization of a microcontroller may take months and may be a very costly process before the microcontroller is fully functional.
Additionally, current microcontroller implementations have complex memory systems. There are many options for the types of devices that make up the memory spaces. For example, the user must configure on-chip memory blocks, memory-mapped peripheral control registers, and all different types of off-chip memories when programming a single microcontroller. The number of possible configurations can be quite daunting. If the configuration of each of these memory spaces is not correct, the microcontroller will not function correctly. Finding errors in the memory configuration is difficult because the user must again return to the same number of manuals that they initially used to set the values to determine what is wrong. This process is often time consuming. Indeed, the process may take a considerable amount of time for a user to correctly configure a microcontroller to interface with the memory in their design, a feature which is necessary for the operation of the remaining portion of the system.
The trial and error approach required to configure the memory spaces of a microcontroller is made somewhat easier by software programs. For example, ApBuilder is a tool developed by Intel to allow their customers to evaluate, compare, and use on-line reference manuals for Intel 80C186 and 80C196 family microcontrollers in a Microsoft Windows environment. ApBuilder also provides a programming aide for those families of Intel microcontrollers. However, while ApBuilder allows a user to make changes to configuration parameters using a software program, ApBuilder allows a user to modify the functionality of other parameters without informing the user when a change is made. Therefore, this allows the user to create initializations and memory space mappings which won't function correctly. Therefore, the user is required to spend additional time determining where the erroneous change was made and what should be done to correct the error. Furthermore, ApBuilder's memory map portion is non-graphical and this increases the user's difficulty when they have unintentionally overlapped memory regions.
Although ApBuilder attempts to ease the complexity of memory space programming, a need exists for a memory system which efficiently and effectively programs memory in a microcontroller or other data processing system. Currently, solutions to this problem do not provide for a "smart" programming solution in which errors are determined before a user actually tries to use the microcontroller in a system.